C#键值对中,用已知值输出键

C#键值对中,用已知值输出键,第1张

软糖理解的题目意思应该是,已知一个泛型键值对集合中的值,想要找到它的键。

使用foreach循环遍历哈希表或字典,可以获取指定值的键。

代码如下

            var 字典 = new Dictionary<string, string>();

            //获取指定值的键

            string 键;

            foreach (var 键值对 in 字典)

            {

                if (键值对Value == "指定值") { 键 = 键值对Key; return; }

            }

注意:如果有重复值,将返回第一个匹配值的键。

如满意,请采纳,谢谢。

解析url,本想用正则表达式处理,但正则表达式速度较慢。用split处理一下就可以了。

 

package RequestPackage;

import javautilHashMap;

import javautilMap;

public class CRequest {

    /

      解析出url请求的路径,包括页面

      @param strURL url地址

      @return url路径

     /

    public static String UrlPage(String strURL)

    {

    String strPage=null;

      String[] arrSplit=null;

     

      strURL=strURLtrim()toLowerCase();

     

      arrSplit=strURLsplit("[]");

      if(strURLlength()>0)

      {

          if(arrSplitlength>1)

          {

                  if(arrSplit[0]!=null)

                  {

                  strPage=arrSplit[0];

                  }

          }

      }

     

    return strPage;   

    }

    /

      去掉url中的路径,留下请求参数部分

      @param strURL url地址

      @return url请求参数部分

     /

    private static String TruncateUrlPage(String strURL)

    {

    String strAllParam=null;

      String[] arrSplit=null;

     

      strURL=strURLtrim()toLowerCase();

     

      arrSplit=strURLsplit("[]");

      if(strURLlength()>1)

      {

          if(arrSplitlength>1)

          {

                  if(arrSplit[1]!=null)

                  {

                  strAllParam=arrSplit[1];

                  }

          }

      }

     

    return strAllParam;   

    }

    /

      解析出url参数中的键值对

      如 "indexjspAction=del&id=123",解析出Action:del,id:123存入map中

      @param URL  url地址

      @return  url请求参数部分

     /

    public static Map<String, String> URLRequest(String URL)

    {

    Map<String, String> mapRequest = new HashMap<String, String>();

   

      String[] arrSplit=null;

     

    String strUrlParam=TruncateUrlPage(URL);

    if(strUrlParam==null)

    {

        return mapRequest;

    }

      //每个键值为一组 >

这是前端(应用端)和后端(服务端)的问题,这个应该是每个用户的单独配置,那么应该放在前端而是不是放在后端,如果放在后端,那么每个用户都要读取,那么体验一定不好。

对于前端来说,只要加一个“配置文件”(其实就是一段代码)就可以,然后通过服务端的程序读取这个“配置文件”,就知道相应的顺序了,这样总比,连通服务器读取相应的表,来的要快。

如果非要用数据库解决,那我们做一个假设,有100项,某人将所有的项目变成了从后往前倒着写的,也就是第100项与第1项位置互换,第99项与第2项位置互换,这样,那么最后是第50项与第51项调换,也就是100项完全变换了位置,那么不管你怎么存储,怎么读取,这些项都必须全部保存起来,因为每一项的顺序都变了,所以这个方案并不是十分好。

当然,如果非要这么做的话,那么有一个稍微简单一点的办法,不过也需要前端的配合而且,很可能出现征用的情况,使用效果也不一定能太好。

我的办法是建立userid 10001 10002 10003 这样一张表,说白了就是一张以默认顺序ModuleID(个人觉得这个可能是你的表头代码,如果不是不要介意)为字段名的表,然后每条用户id,对应一组编号比如(默认编号为1,2,3,4):

userid 10001 10002 10003 10004

1 4 3 1 2

2 2 1 4 3

3 1 2 3 4

类似于这样就能直接得到用户的编号顺序了,不过这种还是不如在前端一个配置文件来的舒服(用户修改配置文件后,服务端也会备份(类似于上表这种也可以作为一个客户端配置的备份),但是这种备份比直接修改数据库要要省事不少,至少节省了数据库的资源),而且可能出现征用的问题,比如两个人或更多的人同时修改代码,那么一张表不可能让这么多人同时update,肯定要出现征用,那么服务体验就不会太好(备份的话,不用那么及时,所以征用的可能性不大,即使出现也是发生在后端,用户的体验并没有什么影响)。

以上均为个人理解,共同探讨。

java Map 遍历一般有四种方式

方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

方式二: 在for-each循环中遍历keys或values。

如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。

方式三:使用Iterator遍历

使用泛型:

不使用泛型:

你也可以在keySet和values上应用同样的方法。

方法四:  通过键找值遍历(效率低)

作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。

因为从键取值是耗时的 *** 作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。

总结:

如果仅需要键(keys)或值(values)使用方法二。

如果所使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。

否则使用方法一(键值都要)。

扩展资料:

类似的遍历算法:

二叉树的遍历算法

1、先(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下 *** 作:

⑴ 访问根结点;

⑵ 遍历左子树

⑶ 遍历右子树。

2、中(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下 *** 作:

⑴遍历左子树;

⑵访问根结点;

⑶遍历右子树。

3、后(根)序遍历得递归算法定义:

若二叉树非空,则依次执行如下 *** 作:

⑴遍历左子树;

⑵遍历右子树;

⑶访问根结点。

参考资料:

百度百科——Java

setAttribute(String name, Object o) 方法存放一个对象名和对象 类似于键值对getAttribute(String name);方法通过一个键名或者说对象名 取出对象如果要存如list集合 那么也类似 下面我写的测试代码 可供参考: <%

List list=new ArrayList();

listadd("北京");

listadd("重庆");

listadd("广州");

requestsetAttribute("address",list);

requestsetCharacterEncoding("GBK");

List ps=(List)requestgetAttribute("address");

for(int i=0;i<listsize();i++){

outprintln(psget(i));

} 如有疑问可追问,谢谢!

%></SPAN></SPAN></p>

选中列表可以查看是第几个。

目前正在做的一个记账本APP中就用到了它,主要是用它来呈现收支明细,是一个图文列表的呈现方式。

android点击列表,动态显示对应的内容,可以点击之后,跳转到详情页面进行显示,主要是用intent进行跳转,也可以携带数据bundle,key-value键值对来保存。

使用集合去重 + local动态变量设置 + exec 字符串解析 可实现,话不多说,代码在下面,格式有问题调整下空格:

list_msg = [{'date':'2019-08-17', 'type':'旅游', 'over_im':'12365'},

{'date':'2019-08-17', 'type':'haha', 'over_im':'12365'},

{'date':'2019-08-18', 'type':'娱乐', 'over_im':'11234'},{'date':'2019-08-19', 'type':'生活', 'over_im':'9532'},]

# 去除字典重复的data ,获取数据包含多少天内容

set_mark = {i['date'] for i in list_msg}

# 去除非法命名字符作为列表后缀:

ver_name = [ireplace('-','_') for i in set_mark]

# 给列表排序,确保按照顺序输出变量

ver_namesort()

# 设置动态命名模板

list_name_template = 'list_data_'

# 创建local对象,准备创建动态变量

createver = locals()

# 循环遍历数据并创建动态列表变量接收

for mark in set_mark:

# 动态创建变量

createver[list_name_template + markreplace('-','_')] \

= [dict_current for dict_current in list_msg if dict_current['date'] == mark]

for name in ver_name:

print(list_name_template + name + ':' ,end='\t') # 打印自动创建的变量名称,采用tab分隔

exec('print('+list_name_template + name +')') # 打印变量内容(列表)

'''

打印结果

list_data_2019_08_17: [{'date': '2019-08-17', 'type': '旅游', 'over_im': '12365'}, {'date': '2019-08-17', 'type': 'haha', 'over_im': '12365'}]

list_data_2019_08_18: [{'date': '2019-08-18', 'type': '娱乐', 'over_im': '11234'}]

list_data_2019_08_19: [{'date': '2019-08-19', 'type': '生活', 'over_im': '9532'}]

'''

以上就是关于C#键值对中,用已知值输出键全部的内容,包括:C#键值对中,用已知值输出键、java解析出url请求的路径和参数键值对类、关于数据库存储键值对的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9770607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存