แปลงอาร์เรย์ของจำนวนเต็มเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาค


273

มันเป็นคำถามง่าย ๆ ฉันเป็นมือใหม่ใน C # ฉันจะทำสิ่งต่อไปนี้ได้อย่างไร

  • ฉันต้องการแปลงอาเรย์ของจำนวนเต็มเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาค

ฉันมี

int[] arr = new int[5] {1,2,3,4,5};

ฉันต้องการแปลงเป็นสตริงเดียว

string => "1,2,3,4,5"

คำตอบ:


539
var result = string.Join(",", arr);

สิ่งนี้ใช้โอเวอร์โหลดต่อไปนี้ของstring.Join:

public static string Join<T>(string separator, IEnumerable<T> values);

คุณไม่จำเป็นต้องผ่านอาร์กิวเมนต์ทั่วไปที่ชัดเจนในกรณีนี้ มันจะถูกอนุมาน
leppie

6
Pre .NET 4 string.Join (",", Array.ConvertAll (arr, i => i.ToString ()))
TPAKTOPA

มีวิธีง่าย ๆ ในการทำสิ่งตรงกันข้ามหรือไม่? นำสตริงและใส่ลงในอาร์เรย์?
Kory

3
@Kory: การใช้วิธี String.Split ดูmsdn.microsoft.com/en-us/library/…
Cheng Chen

132

.NET 4

string.Join(",", arr)

.NET ก่อนหน้านี้

string.Join(",", Array.ConvertAll(arr, x => x.ToString()))

17
ขอบคุณสำหรับรุ่น pre-.NET4!
kdenney

1
เพิ่งรู้ว่าฉันไม่สามารถใช้รุ่น. net 4 และฉันไม่เข้าใจว่าทำไมฉันจึงมีข้อผิดพลาดจนกว่าฉันจะเห็นคำตอบของคุณขอบคุณ
Luis Tellez

ฉันใช้. NET 4.5 ฉันพยายามต่อตัวเลขคั่นด้วยเครื่องหมายจุลภาคด้วยสตริง ฉันพบข้อผิดพลาดว่า "ไม่สามารถแปลงสตริง [] เป็นถ่านได้" ดังนั้นรุ่นก่อนหน้านี้ทำงานได้อย่างไม่มีที่ติ
Prasanth G

10
int[] arr = new int[5] {1,2,3,4,5};

คุณสามารถใช้ Linq ได้

String arrTostr = arr.Select(a => a.ToString()).Aggregate((i, j) => i + "," + j);

5

คุณสามารถมีวิธีการขยายคู่หนึ่งเพื่อให้งานนี้ง่ายขึ้น:

public static string ToDelimitedString<T>(this IEnumerable<T> lst, string separator = ", ")
{
    return lst.ToDelimitedString(p => p, separator);
}

public static string ToDelimitedString<S, T>(this IEnumerable<S> lst, Func<S, T> selector, 
                                             string separator = ", ")
{
    return string.Join(separator, lst.Select(selector));
}

ดังนั้นตอนนี้เพียง:

new int[] { 1, 2, 3, 4, 5 }.ToDelimitedString();

3

ใช้AggregateวิธีLINQ เพื่อแปลงอาเรย์ของจำนวนเต็มเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาค

var intArray = new []{1,2,3,4};
string concatedString = intArray.Aggregate((a, b) =>Convert.ToString(a) + "," +Convert.ToString( b));
Response.Write(concatedString);

การส่งออกจะเป็น

1,2,3,4

นี่เป็นหนึ่งในโซลูชันที่คุณสามารถใช้ได้หากคุณไม่ได้ติดตั้ง. net 4


มันทำงานได้ไม่ดีเนื่องจากการต่อสายอักขระแม้ว่า
Simon Belanger

ใช่มันจะทำงานได้ไม่ดี แต่ก่อน. net 4.0 String.join จะใช้อาร์เรย์สตริงเป็นพารามิเตอร์เท่านั้นดังนั้นในกรณีนี้เราจำเป็นต้องแปลงเป็นสตริงด้วยเราสามารถใช้ ToString ให้ทำงานได้ดีขึ้น แต่มีปัญหาข้อยกเว้น null
sushil pandey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.