首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当添加重复数字时,哪个数字字典集合会重新排序项目?

当添加重复数字时,哪个数字字典集合会重新排序项目?
EN

Stack Overflow用户
提问于 2014-12-30 15:45:39
回答 3查看 127关注 0票数 1

我的C#程序允许用户按优先级对项目进行数字排序。我已经写了一个例程,当用户修改项目的排名时,它会自动按排名重新排序项目。因此,当优先级为3的项目更改为1时,例程将重新排序前3个项目。类似地,当优先级1的项目变成优先级3,那么那些排名2,3的项目就变成了1,2。

现有的集合类是否内置了此功能?如果是这样的话,代码样本也将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2014-12-30 15:52:50

C#有一个SortedSet<T>集合,可以使用用户提供的自定义IComparer<T>对其进行排序。

但是,集合不会对集合中已有项目的更改做出反应,即,如果更改了已在集合中的项目的优先级,则不会自动上移或下移项目。

您需要从SortedSet<T>中删除该项目,更改其优先级,然后再重新添加。这样,集合将把它放在新的位置,按顺序移动其他项以适应更改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SortedSet<Project> prioritizedProjects = new SortedSet<Project>(new CompareProjByPriority());
...
Project rePrioritize = ...;
prioritizedProjects.Remove(rePrioritize);
rePrioritize.Priority = 1;
prioritizedProjects.Add(rePrioritize);
票数 5
EN

Stack Overflow用户

发布于 2014-12-30 15:56:47

没有内置的集合可以“理解”排名的概念。然而,如果秩是一个连续数的虚构概念,那么一个简单的List<Project>就可以做到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Project> projects = GetProjects();
Project project = projects[2]; // grab project on rank 3 (index 2 since it's 0 based)
projects.RemoveAt(2);          // pick it up
projects.Insert(0, project);   // place the project in front of the first

这将允许用户对项目进行“优先级排序”。

但是,如果rank是Project的属性,则需要手动更新每个受影响的元素;这不应该是内置集合的责任。

票数 1
EN

Stack Overflow用户

发布于 2014-12-30 16:34:52

您可以扩展一些集合,例如: generic list来完成此操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static bool SetValue<T>(this List<T> collection, int oldValue, int newValue)
{
    if ((Math.Min(newValue, oldValue) <= -1) ||
        (Math.Max(newValue, oldValue) > collection.Count()))
    {
        return false;
    }
    if (newValue != oldValue)
    {
        var value = collection[oldValue];
        collection.RemoveAt(oldValue);
        if (newValue == collection.Count())
        {
            collection.Add(value);
        }
        else
        {
            collection.Insert(newValue, value);
        }
    }
    return true;
}

之后,您可以执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var items = new List<char> { 'A', 'B', 'C' };
        var start = string.Join(", ", items); //"A, B, C"
        items.SetValue(2, 0);
        var result = string.Join(", ", items); //"C, A, B"

它是2,0而不是3,1,因为第一个元素是0而不是1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27708380

复制
相关文章
删除排序数组中的重复数字
题意 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 样例 给出数组nums =[5,6,8,9,9,10],你的函数应该返回长度5,此时nums = [5,6,8,9,10]。 思路 用 2 个指针,一个指有效元素的长度,一个从前向后扫,跳过重复的元素,将不重复的元素依次放到数组前方,最后返回有效元素的长度即可。 代码实现 public class Solution { /**
一份执着✘
2018/06/04
1.3K0
删除排序数组中的重复数字Ⅱ
题意 根据 删除排序数组中的重复数字 中的题意,跟进 ”删除重复数字“,如果可以允许出现两次重复将如何处理? 样例 给出数组 A = [1,1,2,2,2,3],你的函数应该返回长度 5,此时 A = [1,1,2,2,3]。 思路 这道题跟 删除排序数组中的重复数字 差不多,无非就是多判断一次,判断是否有两个连续的重复元素即可。 代码实现 public class Solution { /** * @param A: a array of integers * @return
一份执着✘
2018/06/04
1.2K0
数字排序
问题描述 试题编号: 201503-2 试题名称: 数字排序 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式   输入的第一行包含一个整数n,表示给定数字的个数。   第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。 输出格式   输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 5 2 3 3 1 3 4 2 5 2 3 5 样例输出 3 4 2 3 5 3 1 1 4 1 评测用例规模与约定   1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。
geekfly
2022/05/06
3670
【CCF】数字排序
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
5550
不重复数字
如果你是直接吧数存入然后输出的,是不正确的,set内部会有排序,从小到大,程序如下;
杨鹏伟
2020/09/11
6160
Python3匿名函数字典排序、生成式与
参数类型: 我们经常在看别人的代码中,经常出现def(*args,**kwargs)这样的表现形式;
py3study
2020/01/03
5040
[剑指offer] 数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
尾尾部落
2018/09/04
2.1K0
数组中重复的数字
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
MickyInvQ
2021/10/22
2.3K0
LeetCode题解—重复数字
本来今天应该继续说Android系统方面的知识,但是我发现内容有点多,写不完了?。 那,为了保证文章的质量,所以今天就发一篇算法题顶上了~❤️ 算法题也是面试常考的项,之前也说过,虽然用到的比较少,但
码上积木
2021/01/25
4650
101. 删除排序数组中的重复数字 II
允许出现两次重复的意思就是说两次重复不算重复,和一次重复的略有不同,只需要一个计数器来计算是否有两次重复就可以了。
和蔼的zhxing
2018/09/04
5170
判断是否有重复的数字
import java.util.Scanner; import java.util.HashMap; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int m=input.nextInt(); HashMap map=new HashMap(); while(m-->0) { int tmp=input.nextInt(); if(
葆宁
2019/04/18
3.5K0
判断是否有重复的数字
数组中的重复数字
"""描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1数据范围:0\le n \le 10000 \0≤n≤10000进阶:时间复杂度O(n)\O(n) ,空间复杂度O(n)\O(n)示例1输入:[2,3,1,0,2,5,3]复制返回值:2复制说明:2或3都是对的数据范围
用户9955628
2022/08/22
1.4K0
LintCode 删除排序链表中的重复数字 II题目分析代码
给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。 样例 给出 1->2->3->3->4->4->5->null,返回 1->2->5->null 给出 1->1->1->2->3->null,返回 2->3->null
desperate633
2018/08/22
4570
查找数组中重复的数字
        题目来源于《剑指Offer》中的面试题3:找出数组中重复的数字。   // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,   // 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},   // 那么对应的输出是重复的数字2或者3。         解决方法有多种,包括数组排序,哈希表法,以及作者推荐的重排数组法。此处介绍自己的一个做法,以空间换
waylon
2018/03/08
4K0
c-计蒜客 排序好的数组删除重复数字
没事干的时候,可以刷一刷编程的题目,对算法进行熟悉一下,今天这题也是比较简单的,直接给出代码吧。
kdyonly
2023/03/03
3080
LintCode 删除排序数组中的重复数字 II题目分析代码
样例给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A=[1,1,2,2,3]。
desperate633
2018/08/22
4570
寻找数组中的重复数字
前面一系列文章分享了数据结构与算法的基础知识,接下来分享一些算法题的解题思路与实现。欢迎各位感兴趣开发者阅读。
神奇的程序员
2022/04/10
1.4K0
寻找数组中的重复数字
2761: [JLOI2011]不重复数字(平衡树)
2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2133  Solved: 825 [Submit][Status][Discuss] Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数。 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4。 Input 输入第一行为正整数T,表示有T组数据。 接下来每组数
HansBug
2018/04/11
6340
2761: [JLOI2011]不重复数字(哈希表)
2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1770  Solved: 675 [Submit][Status] Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数。 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4。 Input 输入第一行为正整数T,表示有T组数据。 接下来每组数据包括两行,第一行
HansBug
2018/04/10
8420
100. 删除排序数组中的重复数字 双指针+替换
给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 样例 给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
和蔼的zhxing
2018/09/04
9740

相似问题

当键是数字时,python字典

10

混合字典排序和数字排序

11

当数字的数字分开时对它们进行排序

10

当数字被重复时,数据读取

21

仅当没有重复的数字时才打印数字

60
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文