поиск списка индексов для удаления класса структуры из - PullRequest
0 голосов
/ 17 декабря 2018

так что в основном у меня есть следующая проблема:

Я создал структуру userdata:

[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 является Serializable, потому что мне нужно сохранить пользователей для нескольких сеансов.Теперь пользователи могут быть удалены, и я хочу удалить их из списка 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(); 
    }

кто-то знает, как сравнить значения и получить индекс индексаЗначение CompareID в моем списке SaveData_User для удаления этих UserData?

Примечание. Сохранение и загрузка userData в SaveData_User работает хорошо.

Большое спасибо!

1 Ответ

0 голосов
/ 17 декабря 2018
 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, если они уже не загружены или не обновлены.Затем вам нужно будет вручную проверить, совпадает ли идентификатор пользователя с идентификатором сравнения в forloop.Если это соответствует, сохраните индекс из цикла.Разорвать от цикла и удалить элемент в индексе.После этого сохраните updatedUserData, чтобы оно было записано обратно в ваш файл сохранения.


Это вернет вам элемент:

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);
}
...