最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 刪除數(shù)組內(nèi)的某個(gè)值、一組值方法詳解

 更新時(shí)間:2020年03月01日 09:49:50   作者:粽先生  
在本篇文章里小編給大家整理的是關(guān)于C# 如何刪除數(shù)組內(nèi)的某個(gè)值、一組值的相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。

最近優(yōu)化了一個(gè)權(quán)限校驗(yàn)的功能,之前每次其他系統(tǒng)在獲取各自系統(tǒng)的權(quán)限配置時(shí),sso都去找到本地對(duì)應(yīng)的權(quán)限文件讀取解析一次。

這種設(shè)計(jì)雖然可以實(shí)現(xiàn)功能,但是這種反復(fù)去讀取的策略并不經(jīng)濟(jì),尤其在高并發(fā)的情況下更可能會(huì)成為性能瓶頸。

于是我對(duì)這塊業(yè)務(wù)進(jìn)行了優(yōu)化,而在優(yōu)化的過(guò)程中針對(duì)如何去除數(shù)組內(nèi)的某些參數(shù)試驗(yàn)了一些寫(xiě)法,下面記錄我認(rèn)為比較優(yōu)雅的寫(xiě)法。

首先講下場(chǎng)景,設(shè)計(jì)多系統(tǒng)的權(quán)限統(tǒng)一由sso控制,那么每次用戶登錄其他系統(tǒng)后需要向sso請(qǐng)求“用戶在該系統(tǒng)已有的權(quán)限”或“該用戶當(dāng)前是否擁有該功能的操作權(quán)限”。

那么sso需要在權(quán)限驗(yàn)證通過(guò)后再去獲取該用戶當(dāng)前的權(quán)限信息并返回,于是在權(quán)限校驗(yàn)的service中,我在構(gòu)造器里根據(jù)已有的系統(tǒng)類(lèi)型先獲取一次對(duì)應(yīng)完整的權(quán)限樹(shù),后面如果發(fā)現(xiàn)有缺失再?lài)L試讀取文件,不缺失則直接讀緩存配置。

已有的系統(tǒng)通過(guò)枚舉來(lái)記錄,假設(shè)定義如下:

public enum EnumSystemType
{
  NoMenu = 0, // 不需要權(quán)限樹(shù)的系統(tǒng)或程序
  App01 = 1,
  App02 = 2,
  ......
}

每個(gè)系統(tǒng)的權(quán)限配置保存在各自的文件中,例如App01完整的權(quán)限樹(shù)保存在App01.json中。

接著就是根據(jù)已有的系統(tǒng)去獲取每個(gè)文件的內(nèi)容并解析成權(quán)限樹(shù)緩存下來(lái)。而在獲取文件內(nèi)容時(shí),不需要獲取權(quán)限的枚舉(NoMenu)需要跳過(guò)找文件讀取的邏輯。這里我借助的是linq的功能來(lái)實(shí)現(xiàn)過(guò)濾該枚舉值的邏輯。

using System.Linq;

private Dictionary<string, List<PermissionNode>> GetPermissions()
{
  //todo

  foreach (var fileName in Enum.GetNames(typeof(EnumSystemType))
     .Where(s => s != nameof(EnumSystemType.NoMenu))
     .ToArray())
  {
    //todo
  }

  //todo
}

PS. Enum.GetNames的返回值是字符串?dāng)?shù)組。

單個(gè)參數(shù)的過(guò)濾通過(guò)where很容易就實(shí)現(xiàn)了,我突然想到一個(gè)問(wèn)題,如何實(shí)現(xiàn)批量過(guò)濾一些枚舉值呢?

查了查資料,linq果然有解決方案,就是通過(guò)“Except”。

接著我還是以上面的例子來(lái)試驗(yàn),假如我希望構(gòu)造器讀取時(shí)跳過(guò)NoMenu和App01,可以這么寫(xiě):

using System.Linq;

private Dictionary<string, List<PermissionNode>> GetPermissions()
{
  //todo

  var exceptPermissions = new []
  {
    nameof(EnumSystemType.NoMenu),
    nameof(EnumSystemType.App01),
  };

  foreach (var fileName in Enum.GetNames(typeof(EnumSystemType))
    .Except(exceptPermissions)
    .ToArray())
  {
    //todo
  }

  //todo
}

總結(jié):

1. 如何在一個(gè)數(shù)組中移除某個(gè)值的寫(xiě)法:linq的where

2. 如何在一個(gè)數(shù)組中移除多個(gè)值的寫(xiě)法:linq的except

C#如何刪除數(shù)組中的一個(gè)元素

C#如何刪除數(shù)組中的一個(gè)元素,剩余的元素組成新數(shù)組,數(shù)組名不變

double[] arr = new double[n];

需要?jiǎng)h除的是第m+1個(gè)數(shù)據(jù)arr[m]

求新數(shù)組arr.(新數(shù)組arr包含n-1個(gè)元素)

m,n數(shù)值已知

double[] arr = new double[50];
List<double> list = arr.ToList();
list.RemoveAt(5+1);
double[] newarr = list.ToArray();

以上就是C# 刪除數(shù)組內(nèi)的某個(gè)值、一組值方法詳解的詳細(xì)內(nèi)容,更多關(guān)于C# 如何刪除數(shù)組內(nèi)的某個(gè)值、一組值的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c#中的浮點(diǎn)型轉(zhuǎn)整形的舍取 四舍五入和銀行家舍入實(shí)現(xiàn)代碼

    c#中的浮點(diǎn)型轉(zhuǎn)整形的舍取 四舍五入和銀行家舍入實(shí)現(xiàn)代碼

    c#中的浮點(diǎn)型轉(zhuǎn)整形的舍取 四舍五入和銀行家舍入實(shí)現(xiàn)代碼,學(xué)習(xí)c#的朋友可以參考下
    2012-03-03
  • C#?Razor語(yǔ)法規(guī)則

    C#?Razor語(yǔ)法規(guī)則

    這篇文章介紹了C#?Razor的語(yǔ)法規(guī)則,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • C#實(shí)現(xiàn)快捷鍵的幾種常用方法匯總

    C#實(shí)現(xiàn)快捷鍵的幾種常用方法匯總

    這篇文章主要介紹了C#實(shí)現(xiàn)快捷鍵的幾種常用方法,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • 淺談C#單例模式的實(shí)現(xiàn)和性能對(duì)比

    淺談C#單例模式的實(shí)現(xiàn)和性能對(duì)比

    這篇文章主要介紹了淺談C#單例模式的實(shí)現(xiàn)和性能對(duì)比的相關(guān)資料,詳細(xì)的介紹了6種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2017-09-09
  • C#中string和StingBuilder內(nèi)存中的區(qū)別實(shí)例分析

    C#中string和StingBuilder內(nèi)存中的區(qū)別實(shí)例分析

    這篇文章主要介紹了C#中string和StingBuilder內(nèi)存中的區(qū)別,以實(shí)例形式演示了二者在內(nèi)存中的不同之處,需要的朋友可以參考下
    2014-09-09
  • VS2017使用Git進(jìn)行源代碼管理的實(shí)現(xiàn)

    VS2017使用Git進(jìn)行源代碼管理的實(shí)現(xiàn)

    這篇文章主要介紹了VS2017使用Git進(jìn)行源代碼管理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Unity3D動(dòng)態(tài)生成平面網(wǎng)格

    Unity3D動(dòng)態(tài)生成平面網(wǎng)格

    這篇文章主要為大家詳細(xì)介紹了Unity3D動(dòng)態(tài)生成平面網(wǎng)格,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#中的Explicit和Implicit詳情

    C#中的Explicit和Implicit詳情

    Implicit提高了代碼的可讀性,但程序員需要自己保證轉(zhuǎn)換不引發(fā)異常且不丟失信息、Explicit可阻止編譯器靜默調(diào)用可能產(chǎn)生意外后果的轉(zhuǎn)換操作。前者更易于使用,后者能向閱讀代碼的每個(gè)人清楚地指示您要轉(zhuǎn)換類(lèi)型,下面就和小編來(lái)一起學(xué)習(xí)吧
    2021-09-09
  • Unity3D使用GL實(shí)現(xiàn)圖案解鎖功能

    Unity3D使用GL實(shí)現(xiàn)圖案解鎖功能

    這篇文章主要為大家詳細(xì)介紹了Unity3D使用GL實(shí)現(xiàn)圖案解鎖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C#并行編程之信號(hào)量

    C#并行編程之信號(hào)量

    這篇文章介紹了C#并行編程之信號(hào)量,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

贵港市| 镇赉县| 邵东县| 当涂县| 文登市| 沂水县| 乌海市| 澎湖县| 韶关市| 军事| 东丽区| 贺兰县| 集贤县| 延安市| 华池县| 武定县| 冀州市| 东宁县| 黄骅市| 淮南市| 若尔盖县| 长治县| 密山市| 定襄县| 灵丘县| 嘉峪关市| 抚顺市| 新平| 福泉市| 汕尾市| 嘉善县| 毕节市| 连云港市| 五原县| 井研县| 谷城县| 南和县| 栾川县| 当阳市| 静安区| 思南县|