【问题标题】:Merge 2 consecutive elements in a List<string>合并 List<string> 中的 2 个连续元素
【发布时间】:2014-03-17 07:53:51
【问题描述】:

假设一个字符串列表List&lt;string&gt; lst_fruits 包含以下元素:

[1] apple
[2] peach
[3] pine
[4] apple
[5] pear
[6] ...

我正在寻找一种现有的方法来完成结合#3 和#4 的任务。

我曾考虑将#4 的内容复制到#3 并在#4 删除,但我想知道是否有更好的解决方案。

【问题讨论】:

  • 没有更好的解决方案。您了解索引,并且知道如何处理它们。
  • 如果只有 3 和 4,不,没有“优雅”的方式来做到这一点。例如,如果是每 3 次和 4 次;这会有所不同:)
  • 据我所知,没有。因为如果有一个,它将执行您正在执行的相同程序。也许你的 func 上的一个 concat 是 a + c,另一个是 c + a 或 c + "FOO' + a,所以最好把它留给开发人员。
  • 请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。
  • @Tigran 谢谢。我认为有一个现有的方法,但找不到它。回想起来,这很容易,问起来有点傻。

标签: c# generic-list


【解决方案1】:

您对这种方法满意吗?

lst_fruits =
    lst_fruits
        .Take(2)
        .Concat(new []
        {
            String.Join("", lst_fruits.Skip(2).Take(2))
        })
        .Concat(lst_fruits.Skip(4))
        .ToList();

【讨论】:

  • 对于将两个元素合并为一个的简单任务,我想说这只是混淆代码..这真的不可读 IMO..
  • +1 是一个可行的解决方案,但我同意 Default,它的可读性不如替代方案。
【解决方案2】:

最后,我选择了这个:

public static List<string> combine_list_elements(List<string> lst_original, int i, int j)
{
   if (lst_original.Count > i && lst_original.Count > j)
   {
       lst_original[i] += " " + lst_original[j];
       lst_original.RemoveAt(j);
   }
   else
   {
       throw new Exception("One of these 2 items does not exist in this list.");
   }
   return lst_original;
}

这很简单,不知道我为什么要寻找其他东西。

【讨论】:

    【解决方案3】:
        lst_fruits[2] = string.Concat(lst_fruits[2], " ", lst_fruits[3]);
        lst_fruits.RemoveAt(3);
    

    您示例中的列表索引也应该从零开始。 这是处理此问题的最简单方法,即使您似乎正在寻找更复杂的选项:)

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      相关资源
      最近更新 更多