【问题标题】:How to duplicate value of an array n number of times in C#如何在C#中将数组的值复制n次
【发布时间】:2016-01-22 08:33:58
【问题描述】:

我有一个array

string[] AddrArray = new string[] { truncString }; 

其中只包含一个值<Addr>{Addr : n}</Addr>

我怎样才能在同一个array 中复制这个值n 的次数。 在此先感谢

【问题讨论】:

  • 你能澄清你的问题吗?现在还不清楚你到底想做什么以及你的问题是什么。你需要如何“复制”它? ut 应该是一个包含 N 个元素而不是一个元素的新数组吗?还是应该把字符串放大复制?
  • 在 for 循环中将此项目添加到您的数组 n 次?
  • 就像我说的我只有一个数组 string[] AddrArray = new string[] { truncString };只保留一个值 {Addr : n}。我想复制这个值,如 {Addr : n}{Addr : n}{Addr : n} n 次

标签: c# .net arrays string initialization


【解决方案1】:

在您的数组初始化中使用Enumerable.Repeat 可以简化您的任务:

string[] repeatedStrArray = Enumerable.Repeat(truncString, N).ToArray(); //specify N with the number of times you want

【讨论】:

  • 如果数组包含多个项目怎么办?即使它在这种情况下有效,问题是如何重复一个数组而不是单个字符串(这也将是一个 duplicate)。
  • @TimSchmelter 实际上,由于问题并不那么清楚,所以我们所有人在回答时都会假设某些事情。就我而言,truncString 的假设是string。我可以看到你为什么把SelectMany 放平结果,以防万一。我会说它也是一个有效的选择——在这个意义上更强大。
  • 我只是想知道如果第二个字符串是不可能的,为什么 OP 会使用数组。
【解决方案2】:

一种方法是使用Enumerable.Repeat 获取n 个数组,使用SelectMany 将它们展平为1 个包含n 个元素的数组。即使数组包含多个元素,这也有效:

AddrArra = Enumerable.Repeat(AddrArra, n).SelectMany(arr => arr).ToArray();

但我更喜欢可读且更高效的自定义扩展方法:

public static IEnumerable<T> DuplicateItems<T>(this IEnumerable<T> items, int factor)
{
    if (items == null) throw new ArgumentNullException("items");
    if (factor <= 0) throw new ArgumentException("factor must be >= 1", "factor");
    if (factor == 1) return items;

    List<T> list = new List<T>();
    using (var enumerator = items.GetEnumerator())
    {
        for (int i = 0; i < factor; i++)
        {
            while (enumerator.MoveNext())
                list.Add(enumerator.Current);
            enumerator.Reset();
        }
    }
    return list;
}

使用简单:

int n = 10;
AddrArra = AddrArra.DuplicateItems(n).ToArray();

【讨论】:

    【解决方案3】:
     int repeateCount=5;
     string input = "<Addr>{Addr : n}</Addr> ";
     string[] AddrArray =Enumerable.Repeat(input, repeateCount).ToArray() ; 
    

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 2012-08-04
      • 1970-01-01
      • 2015-11-17
      • 2020-05-17
      • 1970-01-01
      相关资源
      最近更新 更多