وضع آخر التقليب / تركيبة
-
06-09-2019 - |
سؤال
أنا أبحث عن طريقة يمكنني إنشاء مزيج مختلف من 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"]