سؤال

أنا أبحث عن طريقة يمكنني إنشاء مزيج مختلف من 4 مجموعات من العناصر بحيث يحتوي عنصر كل مجموعة على مكان ثابت في المجموعة النهائية: لشرح أفضل لمتطلباتي اسمحوا لي أن أعطي عينة من تلك الأربعة وأخيرا ما أنا أنا أبحث عن:

Set # 1 (Street Pre interior) {n، s} set # 2 (اسم الشارع) {frankford، billy} Set # 3 (نوع الشارع) {AVE، St} Set # 4 (Street Post Direction) {s}

اسمحوا لي أن سرد القليل من المجموعات المتوقعة:
n baily ave s
S فرانكفورد
s baily av s
.
.
.

الآن كما ترون أن عنصر كل مجموعة يسقط في مكانه
ما قبل الاتجاه هو في مكان 1
اسم الشارع في مكان 2
نوع الشارع في مكان 3
وصف الشارع في مكانه 4

أبحث عن الطريقة الأكثر فعالية لتنفيذ هذه المهمة، طريقة واحدة للقيام بذلك هي العمل في 2 مجموعات في وقت مثل:
جعل مزيج من مجموعة 1 وتعيين 2 -> إنشاء مجموعة جديدة 5 من المجموعات الناتجة
جعل مزيج من مجموعة 5 وتعيين 3 -> إنشاء مجموعة جديدة 6 من المجموعات الناتجة
جعل مزيج من مجموعة 6 ومجموعة 4 -> هذا سيعطيني المجموعات النهائية

هل هناك أفضل طريقة للقيام بهذا الشيء؟ رجاء، المساعده. سأفضل C # أو Java.

شكرا

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

المحلول 3

@ ديفيد ب ماذا لو كانت قائمة التدوين فارغة، هل هناك طريقة ما زلنا نحصل على مجموعات نظرا لأنها من خلال طريقك لن يتم إرجاع المنتج الديكارتي.


ديفيد ب هنا:

var query =
  from d in predirections.DefaultIfEmpty()
  from n in names.DefaultIfEmpty()
  from t in types.DefaultIfEmpty()
  from s in postdirections.DefaultIfEmpty()
  select new {d, n, t, s};

نصائح أخرى

إليك بعض LinQ (C #) التي تمنحك جميع المجموعات، فهي ليست "الطريقة الأكثر كفاءة".

var query =
  from d in predirections
  from n in names
  from t in types
  from s in postdirections
  select new {d, n, t, s};

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

Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']]
["1A","1B","1C","2A","2B","2C","3A","3B","3C"]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top