簡體   English   中英

用逗號分隔列表,用“和”代替最后一個逗號

[英]Comma separated list with “and” in place of the last comma

我想在C#中創建一個以逗號分隔的列表,其中單詞“and”作為最后一個分隔符。

string.Join(", ", someStringArray)

會產生這樣的字符串

Apple, Banana, Pear

但我希望它看起來像這樣:

Apple, Banana and Pear

是否有一種簡單的方法可以使用Linq實現它而不使用循環?

您可以對除最后一項之外的所有項目進行加入,然后手動添加最后一項:

using System;
using System.Linq;

namespace Stackoverflow
{
    class Program
    {
        static void Main(string[] args)
        {
            DumpResult(new string[] { });
            DumpResult(new string[] { "Apple" });
            DumpResult(new string[] { "Apple", "Banana" });
            DumpResult(new string[] { "Apple", "Banana", "Pear" });
        }

        private static void DumpResult(string[] someStringArray)
        {
            string result = string.Join(", ", someStringArray.Take(someStringArray.Length - 1)) + (someStringArray.Length <= 1 ? "" : " and ") + someStringArray.LastOrDefault();
            Console.WriteLine(result);
        }
    }
}

如您所見,檢查項目數量並確定是否需要添加“和”部分。

一種可能的方案:

var items = someStringArray; // someStringArray.ToList() if not a ICollection<>
var s = string.Join(", ", items.Take(items.Count() - 1)) +
        (items.Count() > 1 ? " and " : "") + items.LastOrDefault();

請注意,如果此語句未實現ICollection<string> (列表和數組實現它),則可以多次迭代someStringArray 如果是這樣,請使用您的集合創建一個列表並對其執行查詢。

是否有一種簡單的方法可以使用Linq實現它而不使用循環?

沒有循環是不可能的。 For循環效果最好。 LINQ查詢將使用多個循環。

    string Combine (IEnumerable<string> list)
    {
        bool start = true;
        var last = string.Empty;
        String str = string.Empty;

        foreach(var item in list)
        {
            if ( !start)
            {
                str = str + " , " + item; 
                last = item;

            }
            else
            {
                str = item;
                start = false;
            } 

        }

        if (!string.IsNullOrWhiteSpace(last))
        {
            str = str.Replace( " , " + last, " and " + last);
        }

        return str;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM