正在搜索要从中删除结构类的列表索引



所以基本上我有以下问题:

我创建了一个用户数据结构:

[Serializable]
public struct UserData
{
public int UserID;
public string UserName;
public int UserScore;
public int UserAvatar; 
}

然后我创建了一个列表,当创建新用户时,我可以在其中存储这些UserData值:

[Serializable]
class SaveData
{
public List<UserData> SaveData_User;
}
public class Data_Controller : MonoBehaviour
{
public List<UserData> userData = new List<UserData>();  
}

在以下函数中,iam填充SaveData_User列表:

public void SetNewUser(string name, int avatar)
{
//save it directly
UserData newUser = new UserData();
newUser.UserID = PlayerPrefs.GetInt("userID") + 1;
PlayerPrefs.SetInt("userID", PlayerPrefs.GetInt("userID") + 1);
newUser.UserName = name;
newUser.UserScore = 0;
newUser.UserAvatar = avatar;
userData.Add(newUser);
SaveUserDataValues();
}

注意:SaveData_User列表是可序列化的,因为我需要保存多个会话的用户。现在可以删除用户,我想通过在以下函数中与他们的ID进行比较,将他们从SaveData_User列表中删除:

public void DeleteUser(int compareID)
{
/*PROBLEM HERE!!
//Find index of id in the userData with the compareID (note compareID should be compared with the UserID element of UserData struct)
*/PROBLEM HERE!!    

//Then remove at and save changes
//userData.RemoveAt("valueMIssed");
//SaveUserDataValues(); 
}

有人知道如何比较这些值并在SaveData_User列表中为我获取compareID值的索引以删除这些UserData吗?

注意:将userData保存并加载到SaveData_User中效果良好。

非常感谢!

int indexToLocate = -1;
for(int i = 0; i < userData.Count; i++)
{
if (userData[i].UserID.Equals(compareID))
{
indexToLocate = i;
break;
}
}
if (indexToLocate != -1)
{
userData.RemoveAt(indexToLocate);
}

首先,如果用户数据尚未加载或刷新,则需要将保存的数据加载到用户数据中。然后,您需要手动检查UserID是否与forloop中的compare ID匹配。如果匹配,则从循环中保存索引。脱离循环并删除索引处的元素。保存更新后的UserData,以便将其写回保存文件中。


这将返回元素:

UserData userDataToRemove = userData.Find(x => x.UserID.Equals(compareID));
if (userData.Contains(userDataToRemove))
{
userData.Remove(userDataToRemove);
}

这将返回索引:

int indexToLocate = userData.FindIndex(x => x.UserID.Equals(compareID));
if (indexToLocate != -1)
{
userData.RemoveAt(indexToLocate);
}

最新更新