0

私は2つの配列を持っています(両方ともそれぞれ2つの文字列を含みます)1つはUSBからのシリアル番号を含みます。もう1つには、テキストファイルのシリアル番号が含まれています。両方とも正常に取得できました。だからここに私の問題があります:私はそれらを互いに比較し、異なるシリアル番号を1つだけ見つけて、それを置き換える必要があります。このような:

Contents (Dummy Serial numbers)
     ________
USB | A | B

TXT | B | C

ご覧のとおり、USBアレイとTXTアレイの両方に同じシリアル番号(B)の1つが含まれています。その部分は簡単です。ただし、C!= Aであることを確認するためのコードを作成する必要があります。次に、Cを置き換えるためにAが必要です。

私はこれを試しました:

for (int x = 0; x < 2; x++)
{
     for (int y = 0; y < 2; y++)
     {
          //checks for same serial number
          if (m_AttachedUSB[x] == m_Existing_Serial_Numbers[y])
          {
              //found one
              IntOnlyOne++;
              //we want this one to stay beacause it has a serial number 
              //that matches one in the .txt file
              m_ChachedUSB = m_AttachedUSB[x];
          }
     }
}

ただし、これは類似したシリアル番号のみを検索します。異なるものを交換するにはどうすればよいですか?

4

3 に答える 3

0

私があなたを正しく理解した場合:

List<int> usb = new List<int> {1,2,4,7,8};
List<int> text = new List<int> {1,2,3,4,5};

usb.Intersect(text).Union(usb);

これにより、{1,2,4,7,8}を含むリストが返されます。

交差メソッドは、両方のリストに含まれるすべてのアイテムを提供します。この場合、{1,2,4}。unionメソッドは、usbのすべてのアイテムがまだ利用できない場合、それらを結合します。この場合、{7,8}。

于 2012-11-15T14:26:08.780 に答える
0

以下は、USBリスト内のすべてのシリアル番号のセットを作成し、TXTリストをループして、USBセットから一致するアイテムを削除するか、TXTリスト内の「古い」アイテムのインデックスを記録します。

次に、「古い」アイテムをUSBセット内の残りのアイテムに置き換えます。これは、「新しい」アイテムになります。

これは、両方のリストが同じ長さであり、USBリストに重複が含まれていないことを前提としています。

HashSet<string> usbSNs = new HashSet<string>(m_AttachedUSB); // { "A", "B" }
List<int> txtOldIndices = new List<int>();                   // { }

// Remove existing items from USB set, note indices of old items in TXT list.
for (int i = 0; i < m_CachedUSB.Length; i++)
{                                         // First iteration  Second iteration
    if (!usbSNs.Remove(m_CachedUSB[i]))   // Now { "A" }      Still { "A" }
        txtOldIndices.Add(i);             // Still {}         Now { 1 }
}
// At this point you may want to check usbSNs and txtOldIndices
// have the same number of elements.

// Overwrite old items in TXT list with remaining, new items in USB set.    
foreach(var newSN in usbSNs)
{
    m_CachedUSB[txtOldIndices[0]] = newSN;    // Now [ "B", "A" ]
    txtOldIndices.RemoveAt(0);                // Now { }
}

基本的に、これは、両方に共通するアイテムの場所を保持しながら、をコピーする方法ですm_AttachedUSB。これは、私があなたが望んでいたことです。m_CachedUSB

于 2012-11-15T14:26:47.047 に答える
0

リストに4つのアイテムしかないので、シンプルに保つことができます。

if(usbArray[0] == textArray[0])
  usbArray[1] = textArray[1];
else if(usbArray[0] == textArray[1])
  usbArray[1] = textArray[0];
else if(usbArray[1] == textArray[0])
  usbArray[0] = textArray[1];
else if(usbArray[1] == textArray[1])
  usbArray[0] = textArray[0];

基本的に、異なる2つを変更します。

そして2番目の解決策:

for(int i=0; i<=1; i++)
  for(int j=0; j<=1; j++)
     if(usbArray[i] == textArray[j])
       usbArray[(i+1)%2] = textArray[(j+1)%2];
于 2012-11-15T14:26:52.797 に答える