แปลงอาร์เรย์สตริงเป็นสตริง


155

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

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";

ฉันอยากได้อะไรบางอย่างเช่น "Hello World!"

คำตอบ:


280
string[] test = new string[2];

test[0] = "Hello ";
test[1] = "World!";

string.Join("", test);

3
+1 - ฉันลบพื้นที่ในการเข้าร่วมเพื่อแก้ไขให้ถูกต้องตามที่ระบุโดย @davidg
jmort253

ขอบคุณ ฉันไม่ได้สังเกตเห็นพื้นที่ต่อท้ายแม้ว่าฉันจะคัดลอกวางลงในคำตอบของฉัน
Dave Ward

2
ฉันต้องใส่ตัวคั่นระหว่างสตริงของฉัน (โคม่าและช่องว่าง) ดังนั้นฉันจึงใช้: var separator = ", "; string.Join(separator , test);
drpawelo

5
คำตอบที่ดี แม้ว่าผมจะแนะนำให้ใช้มากกว่าการใช้string.Join(string.Empty, test) empty-paranthesis
ตอนนี้เขาที่จะต้องไม่ถูกตั้งชื่อ

37

เล็กน้อยเร็วขึ้นตัวเลือกกว่าการใช้การใช้งานดังกล่าวแล้วของJoin()วิธีการเป็นConcat ()วิธีการ มันไม่จำเป็นต้องมีพารามิเตอร์ตัวคั่นว่างเปล่าเป็นJoin()ไม่ ตัวอย่าง:

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";

string result = String.Concat(test);

ดังนั้นจึงน่าจะเร็วกว่า


1
Concatดีกว่าในรหัสภายในของJoinมันจะผนวกตัวคั่นหลังจากแต่ละรายการ แต่Concatไม่มีรหัสดังกล่าวมันง่ายกว่าและตรงกว่าJoinมาก นี่คือคำตอบที่ fittst
Squirrel.Downy

22

ลอง:

String.Join("", test);

ซึ่งควรส่งคืนสตริงที่รวมองค์ประกอบทั้งสองเข้าด้วยกัน ""ระบุว่าคุณต้องการให้สตริงเข้าด้วยกันโดยไม่มีตัวคั่นใด ๆ


จะไม่ทำให้ "HelloWorld!" ไม่มีช่องว่างระหว่างคำ?
jmort253

1
@ jmort253 - สตริงต้นฉบับ"Hello "ในคำถามนั้นมีช่องว่างต่อท้าย หากพื้นที่ไม่ได้อยู่ที่นั่นแล้วคุณจะถูกต้องและใช้" "เป็นตัวคั่นจะทำให้รู้สึกมากขึ้น
davidg

19

สตริงที่เรียบง่าย Concat () คือสิ่งที่คุณต้องการ

string[] test = new string[2];

test[0] = "Hello ";
test[1] = "World!";

string result = string.Concat(test);

หากคุณต้องการเพิ่มตัวคั่น (ช่องว่างเครื่องหมายจุลภาค ฯลฯ ) ดังนั้นควรใช้ string.Join ()

string[] test = new string[2];

test[0] = "Red";
test[1] = "Blue";

string result = string.Join(",", test);

หากคุณต้องดำเนินการนี้ในอาร์เรย์สตริงที่มีองค์ประกอบของนักล่ากว่า string.Join () จะดีกว่าโดยมุมมอง performace เพียงให้อาร์กิวเมนต์ "" (ว่าง) เป็นตัวคั่น StringBuilder ยังสามารถใช้เพื่อประสิทธิภาพการทำงาน แต่มันจะทำให้รหัสอีกต่อไป


ConcatและJoinเร็วกว่าStringBuilderถ้าคุณมี 4 หรือน้อยกว่าสตริงที่จะต่อกัน
ตัวเร่งปฏิกิริยาคุณภาพ

3

Aggregate ยังสามารถใช้สำหรับเดียวกัน

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";
string joinedString = test.Aggregate((prev, current) => prev + " " + current);

1
นี่เป็นวิธีที่สิ้นเปลืองอย่างมากในการดำเนินการString.Joinเนื่องจากมีการสร้างสตริงเพิ่มเติมหลายรายการ โปรดอ่านstackoverflow.com/questions/217805/...Aggregateสำหรับตัวแปรที่เหมาะสมของ
Alexei Levenkov

1
    string ConvertStringArrayToString(string[] array)
    {
        //
        // Concatenate all the elements into a StringBuilder.
        //
        StringBuilder strinbuilder = new StringBuilder();
        foreach (string value in array)
        {
            strinbuilder.Append(value);
            strinbuilder.Append(' ');
        }
        return strinbuilder.ToString();
    }

3
นี่เป็นเพียงการดำเนินการด้วยตนเองstring.Join(" ", array)(ยกเว้นพื้นที่ของคุณเพิ่มพื้นที่ต่อท้าย) ทำไมไม่ใช้เพียงอันเดียวในห้องสมุด?
davidg

1
@davidg - Ashwini อาจเป็นเรื่องใหม่ การเรียนรู้ที่จะใช้เครื่องมือที่มีอยู่และการเอาชนะ "ความคิดของฉันต้องทำเอง" ความคิดของวิทยาลัยทำให้บางคนคุ้นเคย มันทำเพื่อฉัน ในที่สุดผู้คนก็สงสัยว่าทำไมเพื่อนร่วมงานของพวกเขาจึงสามารถเขียนรหัสวงกลมรอบ ๆ ตัวพวกเขาแล้วพวกเขาก็เห็นคุณค่าในไลบรารีโค้ดและนำมาใช้ซ้ำ
jmort253

สิ่งที่ฉันจำได้ว่าฉันพยายามที่จะช่วยให้ทุกคน .. ถ้าใครมีทางออกที่ดีกว่าคุณมักจะโพสต์ได้ฟรี @jmort: มันเป็นเวลา 4 ปีแล้วตั้งแต่ฉันทำงาน ... ฉันไม่มีความคิดของใคร คุณกำลังพูดถึง abt ... ใครไม่ได้สมบูรณ์แบบ ... ในช่วงเวลาแห่งประสบการณ์ที่คุณได้เรียนรู้ .. หวังว่าคุณจะไม่ปฏิเสธความจริงข้อนี้ ..
โปรแกรมเมอร์

@Ashwini - ไม่ได้พยายามทำให้คุณขุ่นเคือง เพียงแค่ตอบคำถามของ @davidg ตามประสบการณ์ของฉันที่ทำงานกับวิศวกรที่แตกต่างกัน
jmort253

2
นอกจากนี้สตริงที่ต่อกันจะมีพื้นที่พิเศษติดอยู่ท้ายสุดของสตริง ดังนั้นสิ่งนี้ไม่ได้ตอบคำถามอย่างเต็มที่
jmort253

0

ฉันใช้วิธีนี้เพื่อทำให้โครงการเร็วขึ้น:

RichTextBox rcbCatalyst = new RichTextBox()
{
    Lines = arrayString
};
string text = rcbCatalyst.Text;
rcbCatalyst.Dispose();

return text;

RichTextBox.Text จะแปลงอาร์เรย์ของคุณเป็นสตริงหลายบรรทัดโดยอัตโนมัติ!


-1

ในคำตอบที่ยอมรับ String.Join ไม่ใช่วิธีปฏิบัติที่ดีที่สุดต่อการใช้งาน ควรใช้ String.Concat เนื่องจาก OP ได้รวมช่องว่างต่อท้ายในรายการแรก: "Hello" (แทนที่จะใช้ตัวคั่น null)

อย่างไรก็ตามเนื่องจาก OP ขอผลลัพธ์ "Hello World!" String.Join ยังคงเป็นวิธีการที่เหมาะสม แต่ควรย้ายช่องว่างต่อท้ายไปที่ตัวคั่นแทน

// string[] test = new string[2];

// test[0] = "Hello ";
// test[1] = "World!";

string[] test = { "Hello", "World" }; // Alternative array creation syntax 
string result = String.Join(" ", test);

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.