我有一个[36]长的对象数组。我必须在所有者之间随机分配这些对象,一个对象只能拥有一个所有者。用户可以设置2 - 5个所有者,它是这样的:
我想在例2中询问如何将6个随机对象所有者设置为0(没有所有者),并为每个所有者设置10个随机对象?
答案 0 :(得分:0)
从问题中你想要完成的事情并不完全清楚,但你可以通过>>> df.groupby(['userid', 'grade','examid','subject']).sum().unstack('subject')
numberofcorrectanswers numberofwronganswers
subject Decimals Sentence Synonyms Whole Numbers Decimals Sentence Synonyms Whole Numbers
userid grade examid
4 5 8 4 NaN NaN 6 10 NaN NaN 15
5 5 9 3 NaN NaN 5 1 NaN NaN 12
功能实现一些改组。
Collections.shuffle()
一个可能的结果:
int[] shuffle = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
List<Integer> intList = new ArrayList<Integer>();
for (int i : shuffle) {
intList.add(i);
}
Collections.shuffle(intList);
System.out.println(intList);
<强>参考文献:强>
答案 1 :(得分:0)
解决了问题 首先,我创建了一个2d数组,其中包含4个不同的情况
public int[][] shuffle = {{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
{ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
{ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4},
{ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5}};
然后在一个方法中,我根据用户输入将所需行复制到一个新数组。我在原始的1d数组上使用了Fisher-Yates shuffle并且循环抛出了对象,我为每个所有者称之为setter方法。 看起来像这样:
for(int i = 0; i < objectArray.length; i++){
int helper = shuffle1d[i];
objectArray[i].setObjectOwner(helper);
}