سؤال

أستطيع أن أفهم string.join ()

  var stringies1 =new [] {"Blood", "is", "Thicker", "Than", "Water" };
  var zoin = string.Join("|", stringies1);

كيف تختلف من طريقة التمديد Join ()؟

I mean stringies1.Join(IEnumerable<T Result......)

هل كانت مفيدة؟

المحلول

طريقة التمديد التي تشير إليها ، enumerable.join هو للانضمام إلى المجموعات ، مما يعني أنك تضعها جنبًا إلى جنب ومحاولة مطابقة العناصر مع العناصر ، وإنتاج النتائج. فكر في الأمر مثل مطابقة دفتر الهاتف مع قائمة أسماءك لحفلة ، للعثور على رقم الهاتف لجميع الأسماء الموجودة في قائمتك.

لذلك ، لا ، لا يمكن استخدام طريقة الانضمام إلى وضع مجموعة واحدة بعد بعضها البعض ودمجها في مجموعة طويلة.

ومع ذلك ، هناك بديل ، يمكنك استخدام طريقة التمديد enumerable.concat في نفس الفصل.

لا تعمل هذه الطريقة على/مع صفائف فقط ، ولكن على جميع أنواع المجموعات التي تنفذ IEnumerable<T>, ، وبالتالي سوف ينتج أيضا آخر IEnumerable<T> نتيجة. هذه النتيجة يمكنك بعد ذلك التحويل إلى صفيف باستخدام enumerable.toarray.

وبالتالي ، يمكنك استخدام الكود التالي:

var stringies1 = new [] {"Blood", "is", "Thicker", "Than", "Water" };
var stringies2 = new [] { "and", "so", "is", "wine" };

var stringies3 = stringies1.Concat(stringies2).ToArray();
// stringies3 now contains "Blood", "is", ... and "and", "so", "is", ...

هذا يفترض أنك تستخدم .NET 3.5 ولديك ما يلي في القائمة في الجزء العلوي من ملفك:

using System.Linq;

إذا ، من ناحية أخرى ، أنت (أو أي شخص آخر يجد هذه الإجابة) لا تستخدم .NET 3.5 ، فأنت بحاجة إلى بعض التعليمات البرمجية اليدوية. إليك طريقة عامة بسيطة (تفترض .NET 2.0) يمكن أن تساعدك:

public static T[] Concat<T>(T[] firstSource, T[] secondSource,
    params T[] restOfSources)
{
    // omitted validation of non-null arguments, etc.

    Int32 totalLength = firstSource.Length + secondSource.Length;
    foreach (T[] source in restOfSources)
        totalLength += source.Length;

    T[] result = new T[totalLength];
    Int32 currentIndex = 0;

    Array.Copy(firstSource, 0, result, currentIndex, firstSource.Length);
    currentIndex += firstSource.Length;

    Array.Copy(secondSource, 0, result, currentIndex, secondSource.Length);
    currentIndex += secondSource.Length;

    foreach (T[] source in restOfSources)
    {
        Array.Copy(source, 0, result, currentIndex, source.Length);
        currentIndex += source.Length;
    }

    return result;
}

يمكن استخدام هذا مثل هذا:

var stringies1 = ...
var stringies2 = ...

var stringies3 = YourClass.Concat(stringies1, stringies2);

نصائح أخرى

أفترض أنه من خلال طريقة التمديد ، فأنت تشير إلى Enumerable.Join طريقة؟ ال string.Join ienumerable.join هي طريقتين مختلفتين إلى حد ما:

  • string.Join سوف تأخذ مجموعة من الأوتار ، والانضمام إليها معًا باستخدام بعض الفاصل ، وإرجاع السلسلة الناتجة.
  • Enumerable.Join سوف يتصرف على مجموعتين بنفس الطريقة التي تعمل بها عملية الانضمام في SQL

نفس الوظيفة نهج مختلف لقدرة القراءة ، ورمز أقل عند الاقتضاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top