搜索列表索引以从中删除结构 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);
}
所以基本上我有以下问题:
我创建了一个用户数据结构:
[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);
}