【问题标题】:c# winforms how to repeat string array members?c# winforms如何重复字符串数组成员?
【发布时间】:2012-06-05 18:48:16
【问题描述】:

首先,我需要从DataGridView.SelectedCells.Values 创建一个字符串数组。然后我需要将该字符串附加到自身,直到达到member.count 的限制。例如, 如果

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

新的字符串 [] 应该是:

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

  • 例如,如果限制为 8。

请问我该如何解决?

【问题讨论】:

  • 你不是在增加,而是在重复。

标签: c# winforms datagridview arrays


【解决方案1】:

您可以在 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];
}

就是这样。

【讨论】:

    【解决方案2】:

    只需为原始数组索引保留一个单独的计数器。比如:

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

    【讨论】:

    • 假设这将通过更多的数据来完成,那么复制整个数组然后切掉最后一个以适应不是更好吗?
    • 最大成员数为 64。也许不会太多。 itsme86 - 你的代码有效。你能写一下从 dgvSelecteCells.Values 创建初始字符串吗?
    • SO 上的问题会有所不同。
    【解决方案3】:

    你可以尝试使用类似的东西

    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>();
    

    我希望这会有所帮助。

    【讨论】:

    • 太棒了!所有解决方案都有效。我对每一个都投了票。但是,我应该指定哪一个作为最终解决方案?
    【解决方案4】:

    此版本使用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));
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-11
      • 2015-03-27
      • 2017-09-21
      • 2022-01-13
      • 1970-01-01
      • 2016-04-09
      • 2017-09-10
      • 1970-01-01
      相关资源
      最近更新 更多