C# 複合型のリストを検索したい
・Unity にてゲームで使う敵の撃破リストを
・リストの中身「 Int・String・Int 」で構成
・リストは外部から読み取り可能・関数を使う場合のみ色々とリストの変更が可能
→ 他の質問の方から流用・アレンジさせてもらってます
C#
1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6// リスト管理 クラス 7public class EnemyKillList : MonoBehaviour 8{ 9 // 外部から読み取り専用のリスト 10 // リスト内データの「更新・追加・削除」は専用の関数でなければアクセス出来ない 11 [SerializeField] 12 public static IReadOnlyList<IReadOnlyRecordData> Readlist => Recodlist; 13 14 // privateリスト <static>が付いているのは上の読み取り専用を<static>にする為 15 [SerializeField] 16 private static List<RecordData> Recodlist = new List<RecordData>(); 17 18 // リストデータ追加 関数 19 // 引数からリスト型 変換 20 // その後リスト 追加 21 public static void AddData(int OrderNumber, string EnemyName, int KillCount) 22 { 23 var rd = new RecordData(); 24 rd.OrderNumber = OrderNumber; 25 rd.EnemyName = EnemyName; 26 rd.KillCount = KillCount; 27 Recodlist.Add(rd); 28 } 29 30 /// 問題箇所A /// 31 // リスト内データ<撃破数>更新 関数 32 public static void UpdateData(int Number, string Name, int Count) 33 { 34 var Findlist = new RecordData { OrderNumber = Number, EnemyName = Name }; 35 var Updatelist = new RecordData { OrderNumber = Number, EnemyName = Name, KillCount = Count }; 36 37 // リスト内のデータ 検索 38 if (Recodlist.Contains(Findlist)) // ← ここのリスト内の検索方法が上手くいきません 39 { 40 // データがリストの何番目かを検索 変数に代入 41 int IndexNum = Recodlist.IndexOf(Findlist); 42 43 // データの撃破数を置き換える 44 Recodlist[IndexNum].KillCount = Updatelist.KillCount; 45 } 46 } 47 48 /// 問題箇所B /// 49 // リスト内データ削除 関数 50 public static void RemoveData(int Number, string Name, int Count) 51 { 52 var Removelist = new RecordData { OrderNumber = Number, EnemyName = Name, KillCount = Count }; 53 54 // リスト内に引数と同じデータがあれば削除 55 if (Recodlist.Contains()) 56 { 57 Recodlist.Remove(Removelist); 58 } 59 60 // 無い場合は処理終了 61 else 62 { 63 return; 64 } 65 } 66} 67 68// 読み取り専用インターフェイス クラス 69public interface IReadOnlyRecordData 70{ 71 int OrderNumber { get; } 72 string EnemyName { get; } 73 int KillCount { get; } 74} 75 76// リスト内部・読み取り専用 クラス 77public class RecordData : IReadOnlyRecordData 78{ 79 public int OrderNumber { get; set; } 80 public string EnemyName { get; set; } 81 public int KillCount { get; set; } 82} 83
問題点
・問題箇所のリスト内検索が上手くいかない
・問題箇所Aの部分では「OrderNumber・EnemyName」で検索をかけ該当するものがある際には「KillCount(撃破数)」を加算・上書きする
・問題箇所Bの部分では「OrderNumber・EnemyName・KillCount」で検索をかけ該当するものがある際にそのリストを削除する
・検索する型が間違っていると考えていますが未だ解決に至っていません
未だ未熟なのでコードに不備などあるかもしれませんかその際は適宜指摘してもらえるとありがたいです
回答2件
あなたの回答
tips
プレビュー