मुझे एक भारित विज्ञापन नियंत्रण के लिए एमवीसी में कुछ लिखना पड़ा जो संभवतः एक ही विज्ञापन को पंक्ति में दो बार नहीं दिखाता था और जल्दबाजी में मैं एक भयानक कोड के साथ समाप्त हुआ जो आपके लिए प्रेरणा के रूप में काम कर सकता है ।
मुझे यकीन है कि ऐसा करने के कई बेहतर तरीके हैं (और मुझे पहले से ही ऐसे मामलों को पता है जहां यह डुप्लिकेट करने की अनुमति देता है, लेकिन जब मैंने इसे खर्च नहीं किया, तो मैंने नौकरी की।
public List<Ad> GetRandomWeightedAds()
{
/* Generate random order list of ads with duplicates for ViewsPerRotation */
List<Ad> returnList = GetAllAds().SelectMany(s => Enumerable.Repeat(s, s.ViewsPerRotation)).OrderBy(s => Guid.NewGuid()).ToList();
for (int i = 0; i < returnList.Count - 1; i++) /* Compare all but the last element against subsequent element */
{
if (returnList[i].Id == returnList[i + 1].Id)
{
/* If next to an identical element try and find a new spot for the subsequent element */
for (int j = 0; j < returnList.Count; j++)
{
if (returnList[j].Id != returnList[i].Id /* Don't switch identical element back into same pos*/
&& (j<i || j == 0 || j-1 == i || returnList[i].Id != returnList[j - 1].Id) /* When moving before current 'i', don't move into a place after an identical element */
&& (j<i || j == returnList.Count - 1 || j + 1 == i || returnList[i].Id != returnList[j + 1].Id)) /* When moving before current 'i', don't move into a place before an identical element */
{
returnList[i] = returnList[j];
returnList[j] = returnList[i+1]; /* returnList[i+1] == returnList[i] */
break;
}
}
}
}
return returnList;
}
स्रोत
2009-03-02 22:36:55
मैं कुछ भी प्रश्न के साथ गलत नहीं दिख रहा। –
@ [किंगनेस्टर]: रीवार्डिंग उत्कृष्ट है, धन्यवाद; अब यह एक सामान्य सवाल है। आपका महल अब रेत की बजाय पत्थर से बना है। –
रेडकास्टल्स के साथ कुछ भी गलत नहीं है, पंक बच्चों के अलावा उन्हें दूसरों के दिन को बर्बाद करने के लिए नीचे लात मारने के अलावा। – ceejayoz