搜索列表索引以从中删除结构 class

searching for list index to delete struct class from

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

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

[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>();  
}

在以下函数中,我正在填充 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);
 }

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


这将 return 你的元素:

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

这将 return 您的索引:

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