C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: ObservableCollectionの比較


(過去ログ 137 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■80709 / inTopicNo.1)  ObservableCollectionの比較
  
□投稿者/ Angra (7回)-(2016/08/04(Thu) 18:43:38)

分類:[.NET 全般] 

2016/08/04(Thu) 18:46:59 編集(投稿者)
C#です。

ObservableCollection<MyData>[50] oldData
ObservableCollection<MyData>[50] currentData

アプリ起動時の値をoldDataに退避し、
保存判定のためにcurrentDataと比較したいです。
oldDataとcurrentDataの数は同じです。

下記方法で判定していますが、非常に煩雑です。
個数が増えると時間もかかりそうです。
何か方法はございますでしょうか。

//// IsDirty関数
for(int i = 0; i < 50; i++)
{
    for(int i = 0; i < oldData[i].count(); i++)
    {
        if(oldData[i][j].dataA != currentData[i][j].dataA)
        {
            return true;
        }
        if(oldData[i][j].dataB != currentData[i][j].dataB)
        {
            return true;
        }
    }
}

return false;

引用返信 編集キー/
■80736 / inTopicNo.2)  Re[1]: ObservableCollectionの比較
□投稿者/ ぶなっぷ (89回)-(2016/08/07(Sun) 13:26:57)
突っ込みどころはいろいろあるが、それは置いておいて、
要は、コレクションになんかデータがいっぱい詰まっていて、
編集されたら、編集されたことを後から知りたいということでしょ?

だったら、後からデータ比較して変更されたか知るのはコストが大きすぎる。

私なら、MyDataに編集フラグを設けるかな。
  bool MyData.IsEdit;
とか追加して、編集されたら、編集されたデータを書き込むついでに、
  MyData.IsEdit = true;
する。

んで、後から、
  foreach(var currentDataItem in currentData)
  {
      var EditDatas = currentDataItem.Where(x => x.IsEdit);
      foreach(var Data in EditDatas)
      {
          Save(Data)
      }
  }
とかかな。

保存が終わったら、編集フラグ落とすのを忘れずに。
  foreach(var currentDataItem in currentData)
  {
      currentDataItem.ForEach(x => x.IsEdit = false);
  }

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -