假设我有一个先前排序的列表: ABCDEF 。用户可以过滤掉其中一些项目,最后得到一个子集: BCEF 。在子集中,然后允许用户对这些项重新排序。例如,他们将 B 移动到 E 之后,现在子集为: CEBF 。然后他们关掉过滤器。我希望原始列表能够反映重新排序的子集。因此,完整列表现在应该如下所示: ACDEBF 。
我在这里寻找什么分类技术?其他可能相关的信息:
答案 0 :(得分:0)
这是一个解决方案:
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:focusable="true"
android:focusableInTouchMode="true"/>
<LinearLayout
android:id="@+id/llTop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/textPaddings"
android:background="@color/headerColor"
android:orientation="horizontal"
android:weightSum="5">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:padding="@dimen/textPaddings"
android:text="Saldo disponibile:"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="italic" />
<TextView
android:id="@+id/tvBudget"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="end"
android:padding="@dimen/textPaddings"
android:text=""
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<ListView
android:id="@+id/lvTransactions"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/llBot"
android:layout_below="@+id/llTop"
android:layout_marginLeft="@dimen/textPaddings"
android:layout_marginRight="@dimen/textPaddings">
</ListView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignTop="@+id/llBot"
android:layout_marginTop="-15dp"
android:clickable="true"
android:src="@drawable/piu"
app:fabSize="mini"
app:layout_anchor="@id/llBot" />
<LinearLayout
android:id="@+id/llBot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_margin="@dimen/textPaddings"
android:background="@color/headerColor"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/textPaddings"
android:layout_weight="1"
android:text="Descrizione:"
android:textColor="@color/whiteOpaque"
android:textSize="15sp"
android:textStyle="italic" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/textPaddings"
android:layout_weight="1"
android:text="Importo:"
android:textColor="@color/whiteOpaque"
android:textSize="15sp"
android:textStyle="italic" />
<!--<Button-->
<!--android:layout_width="0dp"-->
<!--android:layout_height="50dp"-->
<!--android:layout_weight="1"-->
<!--android:text="+"-->
<!--android:textSize="25sp"-->
<!--android:onClick="add"-->
<!--/>-->
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<EditText
android:id="@+id/etDescr"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/textPaddings"
android:layout_weight="1"
android:background="@drawable/edittext_rounded"
android:hint="descrizione spesa"
android:inputType="textCapSentences"
android:paddingEnd="10dp"
android:paddingStart="10dp" />
<EditText
android:id="@+id/etImporto"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/textPaddings"
android:layout_weight="1"
android:background="@drawable/edittext_rounded"
android:drawableEnd="@drawable/euro"
android:hint="importo"
android:inputType="numberDecimal"
android:paddingEnd="10dp"
android:paddingStart="10dp" />
</LinearLayout>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2"
>
<RadioButton
android:id="@+id/rbEntrata"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Entrata"
android:textColor="@color/white"
android:textSize="15sp" />
<RadioButton
android:id="@+id/rbUscita"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Uscita"
android:textColor="@color/white"
android:textSize="15sp" />
</RadioGroup>
</LinearLayout>
结果:
sorted_fullset = ["a","b","c","d","e","f"]
sorted_subset = ["a","b","e"]
def shuffle_set_by_subset(sorted_fullset,sorted_subset,shuffled_subset):
shuffle = dict((item,idx) for idx,item in enumerate(sorted_subset))
shuffled_fullset = sorted_fullset[:]
for idx,item in enumerate(sorted_fullset):
if item in sorted_subset:
place_in_sorted_subset = shuffle[item]
shuffled_fullset[idx] = shuffled_subset[place_in_sorted_subset]
return shuffled_fullset
print shuffle_set_by_subset(sorted_fullset,sorted_subset,["e","b","a"])
print shuffle_set_by_subset(sorted_fullset,sorted_subset,["a","e","b"])
答案 1 :(得分:0)
给定一个预先排序的列表,每当创建一个子集时,记下原始集合中w.r.t子集中项目的位置。 (例如,使用另一个数组来跟踪位置)。
然后确保在重新排列项目时,索引保持不变(默认情况下,如果使用单独的数组)。
最后将重新排列的项目复制回索引数组指示的位置。
例如:A = {a,b,c,d,e,f}。 B_ITEMS = {b,d,e}。 B_POSITIONS = {2,4,5}
让我们说B中的项目重新安排如下: B_ITEMS = {d,e,b}
将B_ITEMS中的项目复制到B_POSITIONS指示的位置。
A = {a,d,c,e,b,f}