讓我們假設我有天的名單:獲得從DaysLIST
- 太陽 - 1
- 週一 - 2
- 週二 - 4
- 週三 - 8
- 週四 - 16
- 週五 - 32
- 週六 - 64
現在用戶可以選擇一個或一個以上從清單。我的數據庫存儲剛剛天(例如:如果用戶選擇的太陽和MON然後值被得到存儲在數據庫3)的總和。現在我想顯示用戶他選擇的日子。計算這個的公式是什麼?
我應該寫入該二進制邏輯??
讓我們假設我有天的名單:獲得從DaysLIST
現在用戶可以選擇一個或一個以上從清單。我的數據庫存儲剛剛天(例如:如果用戶選擇的太陽和MON然後值被得到存儲在數據庫3)的總和。現在我想顯示用戶他選擇的日子。計算這個的公式是什麼?
我應該寫入該二進制邏輯??
創建Flags枚舉爲工作日給他們當作一個位字段:
[Flags]
public enum WeekDays
{
Sun = 1,
Mon = 2,
Tue = 4,
Wed = 8,
Thu = 16,
Fri = 32,
Sat = 64
}
然後保存到數據庫
WeekDays value = WeekDays.Sun | WeekDays.Mon; // Sun, Mon
從數據庫使用讀HasFlag方法當以驗證是否值包含給定的週日(如果給定位域設置爲枚舉值):
WeekDays value = ReadValueFromDatabase();
foreach(WeekDays day in Enum.GetValues(typeof(WeekDays)))
{
if (value.HasFlag(day))
// day is selected
}
這是同位運算的用法:
(value & day) == day
試試這個:
[Flags]
public enum Day
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64,
}
Day d = Day.Friday | Day.Saturday;
Console.WriteLine(d);
Console.WriteLine((int)d);
此打印: 星期五,星期六和96
或者謝爾蓋剛剛張貼在我面前有什麼...
創建一個程序,可以從數據庫中獲得總和的餘數
<pre>
private int GetRemainder(int DaySum)
{
int xRemainder = 0;
if(DaySum > 64)
xRemainder = DaySum % 64;
else if(DaySum > 32)
xRemainder = DaySum % 32;
else if(DaySum > 16)
xRemainder = DaySum % 16;
else if(DaySum > 8)
xRemainder = DaySum % 8;
else if(DaySum > 4)
xRemainder = DaySum % 4;
else if(DaySum > 2)
xRemainder = DaySum % 2;
else if(DaySum > 1)
xRemainder = DaySum % 1;
return xRemainder;
}
private string SelectedDay(int SumValue)
{
if((SumValue/64) > 0)
return "Saturday";
else if((SumValue/32) > 0)
return "Friday";
else if((SumValue/16) > 0)
return "Thursday";
else if((SumValue/8) > 0)
return "Wednesday";
else if((SumValue/4) > 0)
return "Tuesday";
else if((SumValue/2) > 0)
return "Monday";
else if((SumValue/1) > 0)
return "Sunday";
}
</pre>
有變量來存儲值
<pre>
int SumOfDaysSelected = 0;
string DaysSelected = "";
</pre>
然後創造條件,檢查選擇哪些某一天或幾天因變量的值SumOfDaysSelected
<pre>
while(SumOfDaysSelected > 0)
{
if(DaysSelected == "")
DaysSelected = SelectedDay(SumOfDaysSelected);
else
DaysSelected = DaysSelected + "," + SelectedDay(SumOfDaysSelected);
SumOfDaysSelected = GetRemainder(SumOfDaysSelected);
}
</pre>
如果要存儲爲二進制二進制邏輯應該與它的工作方式。但作爲@SergeyBerezovskiy說,你有什麼** **實際試過? –