2012-06-05 92 views
0

首先,我需要從DataGridView.SelectedCells.Values創建一個字符串數組。然後我需要將該字符串附加到自身,直到達到member.count的限制。例如,如果 c#winforms如何重複字符串數組成員?

string [] = {"a", "b", "c"}; // Where abc are selectedCells.Values. 

新的字符串[]應該是:

{"a", "b", "c", "a", "b", "c", "a", "b"}

  • 如果限制是8,例如。

我該怎麼解決這個問題?

+1

你不是在乘,而是在重複。 – ja72

+0

是的,重複,請原諒 – Bonaca

回答

4

您可以在for循環中使用%(模數)。

string[] oldArr = new string[3] {"a","b","c"}; 
string[] newArr = new string[8]; 
int limit = 8; 
for (int i = 0 ; i < limit ; i++) 
{ 
    newArr[i] = oldArr[i%oldArr.Length]; 
} 

就是這樣。

+0

好的,謝謝。這個網站是...非常有趣。 – Bonaca

+1

+1這實際上比我的解決方案更優雅。 – itsme86

+0

@ itsme86謝謝:)實際上你的代碼也不錯;) – sikas

3

只爲原始數組索引保留一個單獨的計數器。喜歡的東西:

string[] strings = new string[] { "a", "b", "c" }; 
string[] final = new string[8]; 

int index = 0; 
for(int i = 0;i < 8;++i) 
{ 
    final[i] = strings[index]; 
    index = (index + 1) % strings.Length; 
} 
+1

假設這樣做會得到更多的數據,那麼採取整個數組的副本,然後把最後一個合適切分會更好嗎? – Limey

+0

成員的最大數量是64.也許不是太多。 itsme86 - 你的代碼有效。你可以寫關於從dgvSelecteCells.Values創建初始字符串嗎? – Bonaca

+0

對於'SO',這將是一個不同的問題。 – ja72

1

您可以嘗試使用類似

int yourLimit = 8; 
int yourIndexer = 0; 
string[] strArr = new string[3] { "a", "b", "c" }; 
List<string> list = new List<string>(); 
foreach (DataGridViewCell cell in dataGridView1.SelectedCells) 
{ 
    if (strArr.Contains(cell.Value.ToString()) && yourIndexer < yourLimit) 
     list.Add(cell.Value.ToString()); 
    yourIndexer++; 
} 
string[] strNewArr = list.ToArray<string>(); 

我希望這有助於。

+0

優秀!所有的解決方案都有效我投了每個票。但是,我應該將哪一個作爲最終解決方案? – Bonaca

+0

你認爲哪一個最適合你的問題的解決方案... – MoonKnight

1

該版本使用Array.Copy來進行復制。

{ 
     int N=10; 
     string[] strings=new string[] { "a", "b", "c" }; 
     int L=strings.Length; 

     int R = (int) Math.Ceiling(N/(1.0*L)); 
     string[] result=new string[N]; 
     for(int index=0; index<R; index++) 
     { 
      int offset = index*L; 
      Array.Copy(strings, 0, result, offset, Math.Min(L, N-offset)); 
     } 
    }